// 导入数据库模块
import { db } from '../db/index.js';
// 导入加密模块
import bcrypt from "bcryptjs";

// 导入生成token的包
import jwt from "jsonwebtoken";

// 注册用户的处理函数
export function regUser(req, res) {
    const sql = `select * from user where username = ?`;
    db.query(sql, req.body.username, (err, rows) => {
        // 执行sql语句失败
        if (err) return res.cc(err);
        // 用户名被占用
        if (rows.length > 0) return res.cc('用户名被占用，请更换其他用户名！');
        // 对密码进行加密
        req.body.password = bcrypt.hashSync(req.body.password, 10);
        const sql = `insert into user set ?`;
        db.query(sql, req.body, (err, rows) => {
            // 执行sql语句失败
            if (err) return res.cc(err);
            // 受影响的行数不为1，注册失败
            if (rows.affectedRows != 1) return res.cc('注册失败，请稍后再试！');
            res.cc('注册成功！', 0);
        })
    })
}

// 导入配置文件
import config from '../config.js';

// 登录的处理函数
export function login(req, res) {
    // 根据用户名查询数据库数据
    const sql = `select * from user where username = ?`;
    db.query(sql, req.body.username, (err, rows) => {
        if (err) return res.cc(err);
        if (rows.length != 1) return res.cc('用户名或密码有误！');
        const compareResult = bcrypt.compareSync(req.body.password, rows[0].password);
        if (!compareResult) return res.cc('用户名或密码有误！');
        // 用户密码验证通过，设置用户信息并剔除密码和头像
        const info = { ...rows[0], password: '', user_pic: '' };

        // 生成token
        const tokenStr = jwt.sign(info, config.jwtSecretKey, { expiresIn: '3h' });
        // 登录成功
        res.send({
            status: 0,
            message: '登录成功！',
            token: 'Bearer ' + tokenStr
        })
    })
}